home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / 0rc_trn2 / rc_main.c < prev    next >
Text File  |  1994-06-01  |  3KB  |  107 lines

  1. /* game main routine */
  2. int game_main(void)
  3. {
  4.     int i;
  5.     char para[64];
  6.     int sr,ab,pd;
  7.     int cx,cy;        /* メインキャラクタの位置 */
  8.     int cdx,cdy;    /* メインキャラクタの移動量 */
  9.     int dr;            /* メインキャラクタの前進(1)か行進か(-1) */
  10.     float cr;        /* メインキャラクタのベクトルの長さ */
  11.     float cw;        /* メインキャラクタのベクトルの角度 */
  12.     float cdw;        /* メインキャラクタの角度変化量 */
  13.     float cww;        /* メインキャラクタのスプライト用の補正角度 */
  14.     int spr_dr;        /* メインキャラクタの方向(スプライトの向きを決める) */
  15.     
  16.     cx=START_CAR_X;
  17.     cy=START_CAR_Y;
  18.     cdx=0;
  19.     cdy=0;
  20.     cr=0.0;
  21.     cw=PAI;
  22.     
  23.     /* バックの初期化(page0を塗る) */
  24. /*    EGB_writePage(egb_work,0);
  25.     EGB_paintMode(egb_work,0x22);
  26.     EGB_color(egb_work,0,0x4321);
  27.     EGB_color(egb_work,2,0x4321);
  28.     WORD(para+0)= 32;
  29.     WORD(para+2)=  0;
  30.     WORD(para+4)=287;
  31.     WORD(para+6)=239;
  32.     EGB_rectangle(egb_work,para);
  33.     EGB_color(egb_work,0,BG_COLOR);
  34.     EGB_color(egb_work,2,BG_COLOR);
  35.     WORD(para+0)= 32+3;
  36.     WORD(para+2)=  0+3;
  37.     WORD(para+4)=287-3;
  38.     WORD(para+6)=239-3;
  39.     EGB_rectangle(egb_work,para);
  40. */    
  41.     SPR_display(1,8);        /* 全スプライトの表示 */
  42.     
  43.     do
  44.     {
  45.         pad_read(&sr,&ab,&pd);
  46.         if(pd != 0)
  47.         {
  48.             SPR_display(2,8);    /* REDY待ち */
  49.             
  50.             if(pd & 0x01)        /* 上が押されたら、 */
  51.                 dr=1;
  52.             if(pd & 0x02)        /* 下が押されたら、 */
  53.                 dr=-1;
  54.             cr+=(float)dr*DR;
  55.             if(cr > SPEED_MAX)
  56.                 cr=SPEED_MAX;
  57.             if(cr < -SPEED_MAX)
  58.                 cr=-SPEED_MAX;
  59.             cdw=0;
  60.             if(ab & 0x02)        /* Bが押されたら、 */
  61.                 cdw=DW*dr;
  62.             if(ab & 0x01)        /* Aが押されたら、 */
  63.                 cdw=-(DW*dr);
  64.             cw+=cdw;
  65.             if(cw >= 2.0*PAI)
  66.                 cw=cw-2.0*PAI;
  67.             if(cw <= -2.0*PAI)
  68.                 cw=cw+2.0*PAI;
  69.         }
  70.         else
  71.             cr=0.0;
  72.         /* メインキャラクタの移動 */
  73.         cdx=(int)( cos(cw)*cr);
  74.         cdy=(int)(-sin(cw)*cr);
  75.         cx+=cdx;
  76.         cy+=cdy;
  77.         if(cx < 0 || cx > 238 || cy < 2 || cy > 226)    /* 壁にぶつかったら */
  78.         {
  79.             cx-=cdx;    /* 値を元に戻しておく */
  80.             cy-=cdy;
  81.             cw-=cdw;
  82.         }
  83.         for(i=0;i < 8;++i)    /* 一応、全ての(自車の)スプライトを移動しておく */
  84.             SPR_setPosition(0,1023-i,1,1,cx,cy);
  85.         if(cw >= 0)    /* 角度を正の数にしておく */
  86.             cww=cw;
  87.         else
  88.             cww=2*PAI+cw;
  89.         cww-=2.0*PAI/8.0/2.0;    /* スプライトの向きの補正 */
  90.         if(cww >= 2.0*PAI)        /* 2PAIから、はみ出さないように */
  91.             cww=cww-2.0*PAI;
  92.         if(cww <= -2.0*PAI)        /* -2PAIから、はみ出さないように */
  93.             cww=cww+2.0*PAI;
  94.         spr_dr=(int)(cww*8/(2.0*PAI)); /* 角度を0~7に分ける */
  95.         for(i=0;i < 8;++i)
  96.         {
  97.             if(i == spr_dr) /* 見せるスプライト */
  98.                 SPR_setAttribute(1023-i,1,1,128+4*i,     0);
  99.             else            /* 見せないスプライト */
  100.                 SPR_setAttribute(1023-i,1,1,128+4*i,0x2000);
  101.         }
  102.     }while(sr == 0);
  103.     
  104.     SPR_display(0,8);    /* スプライト消去 */
  105.     
  106.     return TRUE;
  107. }